System.Collections.Generic.HashSet<T> 类

本文提供了此 API 参考文档的补充说明。

HashSet<T> 类提供高性能集操作。 集是一个集合,其中包含不重复的元素,并且其元素没有特定顺序。

对象的容量 HashSet<T> 是对象可以保存的元素数。 随着 HashSet<T> 元素添加到对象中,对象的容量会自动增加。

HashSet<T>类基于数学集的模型,并提供类似于访问或Hashtable集合键的Dictionary<TKey,TValue>高性能集操作。 简单而言, HashSet<T> 类可以视为 Dictionary<TKey,TValue> 没有值的集合。

HashSet<T>集合未排序,并且不能包含重复的元素。 如果顺序或元素重复比应用程序的性能更重要,请考虑将 List<T> 类与 Sort 该方法一起使用。

HashSet<T> 提供许多数学集运算,例如集加法(联合)和集减法。 下表列出了提供的 HashSet<T> 运算及其数学等效项。

HashSet 操作 数学等效项
UnionWith 联合或设置添加
IntersectWith 交集
ExceptWith 设置减法
SymmetricExceptWith 对称差异

除了列出的集操作之外, HashSet<T> 该类还提供用于确定集相等性、重叠集以及集是另一组的子集还是超集的方法。

仅限 .NET Framework:对于非常大HashSet<T>的对象,可以通过将配置元素的属性<gcAllowVeryLargeObjects>设置为enabledtrue在运行时环境中,将 64 位系统上的最大容量增加到 20 亿个元素。

HashSet<T> 类实现 ISet<T> 接口。

HashSet 和 LINQ 集操作

LINQ 提供对实现或接口的任何数据源的访问、UnionIntersect设置操作和Except设置操作。IQueryableIEnumerableDistinct HashSet<T> 提供更大、更可靠的集操作集合。 例如, HashSet<T> 提供比较,例如 IsSubsetOfIsSupersetOf

LINQ 集操作和 HashSet<T> 操作之间的主要区别是 LINQ 集操作始终返回新 IEnumerable<T> 集合,而 HashSet<T> 等效方法修改当前集合。

通常,如果必须创建新集,或者应用程序只需要访问提供的集操作,则对任何集合或数组使用 LINQ 集操作 IEnumerable<T> 将足够。 但是,如果应用程序需要访问其他集操作,或者不需要或有必要创建新集合,请使用 HashSet<T> 该类。

下表显示了 HashSet<T> 操作及其等效的 LINQ 集操作。

HashSet 操作 LINQ 等效项
UnionWith Union
IntersectWith Intersect
ExceptWith Except
未提供。 Distinct
SymmetricExceptWith 未提供。
Overlaps 未提供。
IsSubsetOf 未提供。
IsProperSubsetOf 未提供。
IsSupersetOf 未提供。
IsProperSupersetOf 未提供。
SetEquals 未提供。